/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UsedPartLibDataObject.js<br>
 * 日期：2018年8月13日<br>
 * 作者: 李姣<br>
 * 功能：已使用的元件库存储数据结构<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

 window.makeNamespace(window,"Rainier.UI.V2");
/**
 * 类型名称：Rainier.UI.V2.Rainier.UI.V2.UsedPartLibDataObject<br>
 * 类型功能：实验库总体数据，实现对象<br>
 */
Rainier.UI.V2.UsedPartLibDataObject = Rainier.UI.V2.DataObject.extend({
	
	NAME : "Rainier.UI.V2.UsedPartLibDataObject",
	
	/**
	 * 初始化函数
	 */
	init : function(data){
		var dataObj = new Rainier.UI.V2.DataObject(data);
		this.usedRoot   = dataObj;
		this._super();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UsedPartLibDataObject.addData<br>
	 * 函数功能：添加子节点<br>
	 * 参数输入：data		 ：添加的值<br>
	 * 参数输入：parentdata ：添加父节点的值<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：父节点不存在<br>
	 */
	addData : function(data,parentData){
		var dataObj		  = new Rainier.UI.V2.DataObject(data);
		var parentDataObj = this.findDataObj(parentData);
		if(parentDataObj){
			parentDataObj.addChild(dataObj.getUuid(),dataObj);	
		}else{
			throw new Error('Cannot add node to a non-existent parent');
		}
	},

	/**
	 * 函数名称：Rainier.UI.V2.UsedPartLibDataObject.addData<br>
	 * 函数功能：添加子节点<br>
	 * 参数输入：data		 ：添加的值<br>
	 * 参数输入：parentdata ：添加父节点的值<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：父节点不存在<br>
	 */
	removeData : function(data,parentData){
		var dataObj		  = new Rainier.UI.V2.DataObject(data);
		var parentDataObj = this.findDataObj(parentData);
		if(parentDataObj){
			parentDataObj.removeChild(dataObj.getUuid(),dataObj);	
		}else{
			throw new Error('Cannot add node to a non-existent parent');
		}
	},

	/**
	 * 函数名称：Rainier.UI.V2.PartLibDataObject.findDataObj<br>
	 * 函数功能：通过值，查找当前节点<br>
	 * 参数输入：data:当前值<br>
	 * 参数输出：无<br>
	 * 函数返回：node:当前值对应的节点<br>
	 * 异常信息：无<br>
	 */
	findDataObj : function(data){
		var findDataObj = null;
		var callback 	= function(dataObj){
			if(dataObj.data === data){
				findDataObj = dataObj;
			}
		}
		Rainier.Basic.CompositeObject.recursiveEach(this.usedRoot,callback);
		if(findDataObj){
			return findDataObj;
		}else{
			console.log("您查找的节点不存在，请检查对应的程序，完成对程序的修改");
		}
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.PartLibDataObject.getChildren<br>
	 * 函数功能：获取当前节点的的子元素<br>
	 * 参数输入：data		：节点的值<br>
	 * 参数输出：children :节点的子元素<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	getChildren : function(data){
		var currentDataObj = this.findDataObj(data);
		// console.log(currentDataObj.getChildren());
		return currentDataObj.getChildren();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.PartLibDataObject.findLikeValue<br>
	 * 函数功能：在当前书中查找与输入字符串相似的元素<br>
	 * 参数输入：str:查找字符串<br>
	 * 参数输出：无<br>
	 * 函数返回：findResult：查找结果<br>
	 * 异常信息：无<br>
	 */
	findLikeValue : function(str){
		var findResult = [];
		var callback   = function(dataObj){
			var data = dataObj.data;
			var componentName = null;
			if(data.componentName){				
				var componentName = data.componentName.toUpperCase();
			}
			if(componentName && componentName.indexOf(str.toUpperCase())!= -1){
				findResult.push(data);
			}
		}
		Rainier.Basic.CompositeObject.recursiveEach(this.root,callback);
		return findResult;
	},
	
});